#include "multidimensional_container.hpp"

#include <iostream>
#include <list>
#include <type_traits>
#include <vector>

template <typename T>
class custom_allocator : public std::allocator<T> {};

struct custom_type {};

int main()
{
	static_assert(std::is_same_v<multidimensional_container<std::vector, std::vector<int>, 1>,
			std::vector<std::vector<int>, std::allocator<std::vector<int>>>>);
	static_assert(std::is_same_v<multidimensional_container<std::vector, int, 2, custom_allocator>,
			std::vector<std::vector<int, custom_allocator<int>>, custom_allocator<std::vector<int, custom_allocator<int>>>>>);
	static_assert(std::is_same_v<multidimensional_container<std::vector, int, 3, custom_allocator>,
		std::vector<
			std::vector<
				std::vector<int, custom_allocator<int>>,
				custom_allocator<std::vector<int, custom_allocator<int>>>>,
			custom_allocator<std::vector<std::vector<int, custom_allocator<int>>, custom_allocator<std::vector<int, custom_allocator<int>>>>>>>);
	multidimensional_container<std::vector, int, 5> container;
	multidimensional_container<std::list, float, 3> lists;
	multidimensional_container<std::vector, custom_type, 3> custom_values;
	
	return 0;
}
